package com.wgh.product.api.client;

import com.wgh.product.api.fallback.SkuClientFallback;
import com.wgh.product.dto.SkuDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * SKU管理客户端接口
 */
@FeignClient(name = "shop-product", fallback = SkuClientFallback.class)
public interface SkuClient {

    /**
     * 根据ID查询SKU信息
     */
    @GetMapping("/api/sku/{id}")
    SkuDTO findById(@PathVariable("id") Long id);

    /**
     * 批量查询SKU信息
     */
    @GetMapping("/api/sku/list")
    List<SkuDTO> findListByIds(@RequestParam("ids") List<Long> ids);

    /**
     * 根据商品ID查询SKU列表
     */
    @GetMapping("/api/sku/product/{productId}")
    List<SkuDTO> findListByProductId(@PathVariable("productId") Long productId);

    /**
     * 扣减库存
     */
    @PostMapping("/api/sku/deduct-stock")
    Boolean deductStock(@RequestBody Map<String, Integer> skuMap);

    /**
     * 分页查询SKU列表
     */
    @GetMapping("/api/sku/page")
    List<SkuDTO> findPage(@RequestParam("page") Integer page, 
                         @RequestParam("size") Integer size,
                         @RequestParam(value = "keyword", required = false) String keyword);

    /**
     * 根据SKU编号查询SKU
     */
    @GetMapping("/api/sku/code/{skuCode}")
    SkuDTO getSkuByCode(@PathVariable String skuCode);

    /**
     * 批量更新SKU库存
     */
    @PutMapping("/api/sku/stock/batch")
    Boolean updateStockBatch(@RequestParam List<Long> skuIds, @RequestParam Integer stock);

    /**
     * 批量更新SKU价格
     */
    @PutMapping("/api/sku/price/batch")
    Boolean updatePriceBatch(@RequestParam List<Long> skuIds, @RequestParam Double price);

    /**
     * 批量更新SKU状态
     */
    @PutMapping("/api/sku/status/batch")
    Boolean updateStatusBatch(@RequestParam List<Long> skuIds, @RequestParam Integer status);

    /**
     * 扣减SKU库存
     */
    @PutMapping("/api/sku/{id}/deduct-stock")
    Boolean deductStock(@PathVariable("id") Long skuId, @RequestParam Integer quantity);

    /**
     * 增加SKU库存
     */
    @PutMapping("/api/sku/{id}/add-stock")
    Boolean addStock(@PathVariable("id") Long skuId, @RequestParam Integer quantity);

    /**
     * 获取SKU详情
     */
    @GetMapping("/api/sku/{id}/detail")
    SkuDTO getSkuDetail(@PathVariable Long id);

    /**
     * 根据商品ID列表查询SKU
     */
    @GetMapping("/api/sku/product/batch")
    List<SkuDTO> getSkuListByProductIds(@RequestParam List<Long> productIds);

    /**
     * 根据ID查询SKU（兼容新接口）
     */
    @GetMapping("/api/sku/get/{id}")
    SkuDTO getById(@PathVariable Long id);

    /**
     * 批量查询SKU（兼容新接口）
     */
    @GetMapping("/api/sku/batch")
    List<SkuDTO> listByIds(@RequestParam List<Long> ids);

    /**
     * 新增SKU
     */
    @PostMapping("/api/sku")
    Boolean save(@RequestBody SkuDTO skuDTO);

    /**
     * 更新SKU
     */
    @PutMapping("/api/sku")
    Boolean update(@RequestBody SkuDTO skuDTO);

    /**
     * 删除SKU
     */
    @DeleteMapping("/api/sku/{id}")
    Boolean delete(@PathVariable Long id);

    /**
     * 批量删除SKU
     */
    @DeleteMapping("/api/sku/batch")
    Boolean deleteBatch(@RequestParam List<Long> ids);
}